package org.grade.controller;

import org.grade.bean.request.TestPaper.TestPaperDeleteRequest;
import org.grade.bean.request.TestPaper.TestPaperPageRequest;
import org.grade.bean.request.TestPaper.TestPaperPointGetRequest;
import org.grade.bean.request.TestPaper.TestPaperUpdateRequest;
import org.grade.common.Result;
import org.grade.manage.QuestionGroupManage;
import org.grade.model.TestPaper;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * 处理关于试卷（TestPaper）的HTTP请求
 * 每个方法都对应一个具体的HTTP请求路径和操作，例如上传试卷、查询试卷列表、删除试卷、更新试卷和获取试卷分数。
 * 方法参数通过注解如@RequestPart和@RequestBody来绑定HTTP请求中的参数。
 * @RequestPart用于绑定请求中的文件或多部分数据（如试卷和表单片）。
 * @RequestBody用于绑定请求体中的JSON数据（如分页请求、删除请求和更新请求等）。
 * 每个方法都返回一个Result对象，用于封装API响应的数据和状态
 */
@RestController
@RequestMapping("/grade")
public class PaperController {
    @Resource
    private QuestionGroupManage questionGroupManage;//管理服务对象，用于处理与试卷相关的业务逻辑。

    /**
     * 上传试卷，接收试卷实体、附件文件（papers）和表单片（sheets）作为参数。
     * @param testPaper
     * @param papers
     * @param sheets
     * @return
     */
    @PostMapping("/upload")
    public Result pushQuestionGroup(@RequestPart("entity") TestPaper testPaper,
                              @RequestPart("paper") MultipartFile[] papers,
                              @RequestPart("sheet") MultipartFile[] sheets) {
        return questionGroupManage.pushQuestionGroup(testPaper, papers, sheets);
    }

    /**
     * 查询试卷列表，接收一个TestPaperPageRequest对象作为分页查询参数
     * @param testPaperPageRequest
     * @return
     */
    @PostMapping("/list")
    public Result queryQuestionGroup(@RequestBody TestPaperPageRequest testPaperPageRequest){
        return questionGroupManage.queryQuestionGroup(testPaperPageRequest);
    }

    /**
     * 删除试卷，接收一个TestPaperDeleteRequest对象作为删除请求参数
     * @param testPaperDeleteRequest
     * @return
     */
    @PostMapping("/delete")
    public Result deleteQuestionGroup(@RequestBody TestPaperDeleteRequest testPaperDeleteRequest){
        return questionGroupManage.deleteQuestionGroup(testPaperDeleteRequest);
    }

    /**
     * 更新试卷信息，接收一个TestPaperUpdateRequest对象作为更新参数
     * @param testPaperUpdateRequest
     * @return
     */
    @PostMapping("/update")
    public Result updateQuestionGroup(@RequestBody TestPaperUpdateRequest testPaperUpdateRequest){
        return questionGroupManage.updateQuestionGroup(testPaperUpdateRequest);
    }

    /**
     * 获取试卷分数，接收一个TestPaperPointGetRequest对象作为查询参数
     * @param request
     * @return
     */
    @PostMapping("/point/get")
    public Result getPoint(@RequestBody TestPaperPointGetRequest request) {
        return questionGroupManage.getPointById(request);
    }
}
